The present invention relates to the design of asynchronous circuits.
As computer system clock speeds become increasingly faster, it is becoming progressively harder to synchronize the actions of computer system components with reference to a centralized system clock. To deal with this problem, computer system designers are beginning to investigate the use of asynchronous circuits that operate in a self-timed manner, without having to adhere to the constraints imposed by a centralized system clock. In addition, asynchronous circuits also have other advantages over synchronous circuits, such as reduced power consumption, increased speed and reduced global complexity.
However, there are some difficulties in using asynchronous circuits. One of the difficulties is in maintaining high speeds when remote asynchronous systems are communicating with each other. In such situations, asynchronous circuits typically use some type of asynchronous handshake protocol (with request and acknowledge signals) for each data transfer. Unfortunately, if the distance between the remote asynchronous systems is large, this type of handshake protocol cannot be used while simultaneously maintaining high throughput, because the handshake latency will be too large. Consequently, in such situations, “bursts” of data are typically sent from sender and receiver, and trailing acknowledgements are returned by the receiver, thereby avoiding the large handshake latency problem.
However, if the sender is faster than the receiver, it is possible for the sender to overrun the receiver. Hence, it is desirable for the sender to slow its sending rate to a rate that is acceptable for the receiver. Similarly, if the receiver is much faster than the sender, it is desirable for the receiver to slow the rate at which it sends trailing acknowledgements to the sender.
Various techniques have been used to limit the rate at which one asynchronous system sends information to another asynchronous system. One of these techniques involves introducing an adjustable delay into the asynchronous system. This can be accomplished by inserting capacitors or inverters into the asynchronous circuitry, or by changing the strength of a variable strength inverter in the asynchronous circuitry. However, each of these techniques provides only a limited range of control while greatly complicating the circuit. In the case of analog systems, these additional components can also introduce noise into the system.
Another technique involves using an arbiter to control communications between asynchronous systems. However, the use of an arbiter in an asynchronous system often causes metastability, which can lead to performance problems and errors.